import os
import sys
from kernel.AFAL.FileManager import *

def handle_allow(manager, action, target):
    if target == "*":
        targets = [f.path for f in os.scandir(os.getcwd()) if f.is_file()]
    else:
        targets = [target]

    for file_path in targets:
        if action == "read":
            manager.SetAction(file_path, readable=True)
            print(f"Разрешено чтение для '{file_path}'")
        elif action == "write":
            manager.SetAction(file_path, writable=True)
            print(f"Разрешена запись для '{file_path}'")
        elif action == "openable":
            manager.SetAction(file_path, openable=True)
            print(f"Разрешено исполнение для '{file_path}'")
        else:
            print(f"Неизвестное действие: {action}")

def handle_deny(manager, action, target):
    if target == "*":
        targets = [f.path for f in os.scandir(os.getcwd()) if f.is_file()]
    else:
        targets = [target]

    for file_path in targets:
        if action == "read":
            manager.SetAction(file_path, readable=False)
            print(f"Запрещено чтение для '{file_path}'")
        elif action == "write":
            manager.SetAction(file_path, writable=False)
            print(f"Запрещена запись для '{file_path}'")
        elif action == "openable":
            manager.SetAction(file_path, openable=False)
            print(f"Запрещено исполнение для '{file_path}'")
        else:
            print(f"Неизвестное действие: {action}")

def handle_list(manager, target, os):
    if not target:
        print("Использование: fileperm list [файл|директория|*]")
        return

    if target == "*":
        targets = [f.path for f in os.scandir(os.getcwd()) if f.is_file()]
    else:
        targets = [target]

    for file_path in targets:
        permissions = manager.GetFile(file_path)
        print(f"{file_path}:")
        print(f"  Чтение: {'Разрешено' if permissions.readable else 'Запрещено'}")
        print(f"  Запись: {'Разрешена' if permissions.writable else 'Запрещена'}")
        print(f"  Исполнение: {'Разрешено' if permissions.openable else 'Запрещено'}")

# Разбиваем строку команды на части
parts = cmd.split()

# Проверяем, что количество частей равно 3
if len(parts) == 4:
    # Распаковываем части команды
    _, action, permission, target = parts

    # Создаем экземпляр FileActionManager
    manager = FileActionManager()

    # Обрабатываем команду
    if action == "allow":
        handle_allow(manager, permission, target)
    elif action == "deny":
        handle_deny(manager, permission, target)
    elif action == "list":
        handle_list(manager, permission, target, os)
    else:
        print(f"Неизвестная команда: {action}")
elif len(parts) == 3:
    _, action, target = parts
    if action == "list":
        handle_list(FileActionManager(), target, os)
elif len(parts) == 2:
    _, action = parts
    if action == "list":
        print("Все правила доступа:")
        for file_path, permissions in FileActionManager().files.items():
            print(f"{file_path}:")
            print(f" Чтение: {'Разрешено' if permissions.readable else 'Запрещено'}")
            print(f" Запись: {'Разрешена' if permissions.writable else 'Запрещена'}")
            print(f" Исполнение: {'Разрешено' if permissions.openable else 'Запрещено'}")
else:
    print("Использование: fileperm <allow|deny> <read|write|execute> [файл|директория|*]")
